ECSでCodeDeployのInstallイベントが一向に終わる気配がない時はタスクのステータスを確認してみよう
はじめに
こんにちは!AWS事業本部のおつまみです。
AWSコンテナ初心者の強い味方である「AWSコンテナ設計・構築[本格]入門」
みなさんご存知でしょうか?
大変良書のため、持っている方々も多いと思います。
書籍について、弊社ブログでも紹介しています。
こちらの書籍に従ってハンズオンを進めていたのですが、途中CodeDeployによるBule/Grrenデプロイのinstallイベントから一向にデプロイが進まなくなってしまいました。 原因を特定するために時間がかかったため、同じような状態になっている方のお役に立てればと思います!
いきなり結論
ECSクラスターの[タスク]タブで必要なタスクのステータスを[Stopped]にすると、[前回のステータス]欄にDeployに失敗している原因がエラーメッセージとして表示されている。
何が起こったのか?
ECSのFargateでCodeDeployによるBlue/Greenデプロイを設定し、Blue→Greenに切り替えるためECSサービスの更新を行いました。(テキストp.325のECSサービス更新)
1時間後…
う〜ん画面が変わらない。。
デプロイステータスはステップ1のまま、デプロイのライフサイクルイベントはinstallのままで一向に終わる気配がありませんでした。
そのため[デプロイを停止してロールバック]をクリックし、一旦デプロイを停止しました。
原因の特定
結論でお伝えしたように、ECSクラスターの[タスク]タブで必要なタスクのステータスを[Stopped]にします。すると、[前回のステータス]欄にDeployに失敗している原因がエラーメッセージとして表示されていました。
原因のメッセージは下記の通りでした。
STOPPED (ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 5 time(s): failed to fetch secret from secrets manager: RequestCanceled: request context canceled caused by: context deadline exceeded)
訳:STOPPED (ResourceInitializationError: シークレットまたはレジストリ認証をプルできません: 実行リソースの取得に失敗しました: asmからシークレットを取得できません: サービス呼び出しが 5 回再試行されました: シークレットの取得に失敗しました )
なにやらSecrets Managerが怪しいと思い、設定数を確認してみました。
すると、ECSのタスク定義で環境変数に設定したパラメータが一つ表示されていませんでした。
ECS環境変数
Secrets Manager
対応方法
こちらの公式サイトから追加設定手順が出ているように、Secrets Managerに手動でdbnameを追加しました。
これで再度ECSサービスの更新を行います。
無事installイベントを乗り越えることができました!
最後に
今回はECSでCodeDeployのInstallが一向に終わる気配がない時のエラー特定方法について紹介しました。ECSのタスクステータスにエラーメッセージが出力されることを知らなかったので、知る良いきっかけになりました。
最後までお読みいただきありがとうございました!
この記事が誰かのお役に立てば幸いです。
以上、おつまみ(@AWS11077)でした!
今回使用した書籍
コンテナ初心者におすすめの書籍です!
まだ読んだことのない方はこの1冊でECSに挑戦してみましょう!